

package proyectodatos1verano.modelo;

import java.util.logging.Level;
import java.util.logging.Logger;

public class BackTracking {

        Wordnament solucion;
	Pila stack = new Pila(); 

//Lista donde se guardarán las soluciones
	Lista soluciones = new Lista();

//El Backtracking recibe el primer elemento de 
	public BackTracking (Pila inicial)
	{
		stack.append(inicial);
	}
        

//El resolvedor de backtracking, recibe si desea
// una soluciOn o todas las soluciones
//	public void solve (boolean findAll)
//	{
//		if (findAll)
//			hallarTodas();
//		else
//			soluciones.add(next());		
//	}

// Una vez solicitada la soluciOn, ya sea todas o una, 
// se puede pedir la lista de las soluciones
	public Lista getSoluciones()
	{
		return soluciones;
	}

//Encuentra la sigte soluciOn
        
        
        public void next(){
            Wordnament tope = (Wordnament) stack.pop();
            Pila p= new Pila();
            while(tope!=null){
		
		if (tope.esSolucion()){
                        
                       
                            this.solucion=tope;
                            this.soluciones.add(solucion.miPalabra.getPalabra());
                            System.out.println("\n\n[Palabra encontrada]"+tope.toString());
                            p=tope.getHijos();
                            stack.append(p);
                            
                       
                }
                else {
                    
                    p=tope.getHijos();
                    
                    stack.append(p);

                }
                
                tope = (Wordnament) stack.pop();
                
                
            }
            if(this.solucion!=null){
                System.out.println("\n\n[Solucion Final]");
                soluciones.imprimir();
            }else{
                System.out.println("\n\nNo se encontraron soluciones, para los datos digitados...\n\n");
            }
            

	}
        
        
        
        
//        public NodoBacktracking next()
//	{
//            while(true){
//		NodoBacktracking tope = (NodoBacktracking)stack.pop();
//		if (tope == null || tope.esSolucion()){
//                    
//                    
//			return tope;
//                
//                }
//		stack.append(tope.getHijos());
//            }
//
//	}
        
        
        
//        public NodoBacktracking next() { 
//            NodoBacktracking tope; 
//            while (!stack.isEmpty()) { 
//                tope = (NodoBacktracking) stack.pop(); 
//
//                if (tope == null || tope.esSolucion()) { 
//
//                    return tope; 
//
//                } 
//
//                stack.append(tope.getHijos()); //tope = pila.pop(); 
//            } 
//            return null;
//        }
    


////Encuentra todas las soluciones
//	private void hallarTodas()
//	{
//		while(!stack.isEmpty())
//			soluciones.add(next());
//	}
    
    
}